package com.huangsm.concurrence.executor;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 执行器服务
 * @author huang
 * @date 2019/2/14
 */
public class ExecutorServiceDemo {
    /**
     * java.util.concurrent.ExecutorService 接口表示一个异步执行机制，使我们能够在后台执行任务。
     * 因此一个 ExecutorService 很类似于一个线程池。
     * 实际上，存在于 java.util.concurrent 包里的 ExecutorService 实现就是一个线程池实现。
     */
    public static void main(String[] args) {
        /**
         * 首先使用 newFixedThreadPool() 工厂方法创建一个 ExecutorService。这里创建了一个十个线程执行任务的线程池。
         * 然后，将一个 Runnable 接口的匿名实现类传递给 execute() 方法。这将导致 ExecutorService 中的某个线程执行该 Runnable
         *
         * 一个线程将一个任务委派给一个 ExecutorService 去异步执行。
         * 一旦该线程将任务委派给 ExecutorService，该线程将继续它自己的执行，独立于该任务的执行。
         */
        ExecutorService executorService= Executors.newFixedThreadPool(10);

        /**
         * execute(Runnable) 方法要求一个 java.lang.Runnable 对象，然后对它进行异步执行。
         * 没有办法得知被执行的 Runnable 的执行结果。如果有需要的话你得使用一个 Callable
         */

        executorService.execute(()->{
            System.out.println("异步任务");
        });
        executorService.shutdown();
    }
    /**
     * 有几种不同的方式来将任务委托给 ExecutorService 去执行：
     * execute(Runnable)
     * submit(Runnable)
     * submit(Callable)
     * invokeAny(...)
     * invokeAll(...)
     */
}
